package interfaceGrafica;

import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import javax.swing.ButtonModel;
import javax.swing.JOptionPane;

import logica.locacao.Extrato;
import logica.locacao.PlanoDeLocacao;
import logica.locacao.RegistroDeLocacao;
import logica.locacao.Seguro;
import logica.locacao.PlanoDeLocacao.TipoDeVeiculo;
import logica.locacao.RegistroDeLocacao.FormaDePagamento;
import logica.main.MainGrafico;
import logica.pessoa.ClienteFisico;
import logica.pessoa.ClienteJuridico;
import logica.util.Data;
import logica.veiculo.Automovel;
import logica.veiculo.Estado;
import logica.veiculo.Motocicleta;
import logica.veiculo.Veiculo;
import persistencia.GeradorDeExtrato;
import persistencia.GeradorDeLogs;
import persistencia.MecanismoDePersistenciaSeguro;
import util.Constantes;


/**
 *
 * @author Grupo LocaLisa - Usa quem precisa
 */

@SuppressWarnings("serial")
public class InterfaceLocacao extends javax.swing.JPanel {

    /**
	 * 
	 */
	
	private MecanismoDePersistenciaSeguro mecanismoDePersistenciaClientesFisico;
    private MecanismoDePersistenciaSeguro mecanismoDePersistenciaClientesJuridico;
    private MecanismoDePersistenciaSeguro mecanismoDePersistenciaRegistroDeLocacao;
    private MecanismoDePersistenciaSeguro mecanismoDePersistenciaRegistroDeDevolucao;
    private MecanismoDePersistenciaSeguro mecanismoDePersistenciaPlanoDeLocacao;
    private MecanismoDePersistenciaSeguro mecanismoDePersistenciaAutomovel;
    private MecanismoDePersistenciaSeguro mecanismoDePersistenciaMotocicleta;
    private GeradorDeLogs geradorDeLog;

    private ClienteFisico clienteFisicoEscolhidoParaLocacao;
    private ClienteJuridico clienteJuridicoEscolhidoParaLocacao;
    private PlanoDeLocacao planoEscolhidoParaLocacao;
    private List <Veiculo> veiculosEscolhidosParaLocacao;

    private List <ClienteFisico> clientesFisicos;
    private List <ClienteJuridico> clientesJuridicos;
    private List <Motocicleta> motocicletasLista;
    private List <Automovel> automoveisLista;
    private List <RegistroDeLocacao> registrosDeLocacao;
    private List <RegistroDeLocacao> registrosDeDevolucao;
    private List <PlanoDeLocacao> planosDeLocacao;
    private Data devolucaoEscolhida;
    private RegistroDeLocacao registroDeLocacaoEscolhido;

    /** Creates new form InterfaceLocacao */
    @SuppressWarnings("deprecation")
	public InterfaceLocacao() {
        
        try {
            geradorDeLog = new GeradorDeLogs();
        } catch (Exception e) {
        }
        initComponents();
        lerDados();
      
        list4.setMultipleSelections(true);
        list2.setEnabled(false);
        jTextField5.setEnabled(false);
        jButton9.setEnabled(false);
        list4.setEnabled(false);
        jTextField2.setEnabled(false);
        jButton7.setEnabled(false);
        list2.setEnabled(false);
        for ( FormaDePagamento forma : FormaDePagamento.values() ){
            jComboBox1.addItem(forma);
        }
        for ( int quilometragem : Constantes.QUILOMETRAGENS_ATE_X ){
            jComboBox2.addItem(new Integer(quilometragem));
        }

        for (PlanoDeLocacao plano : planosDeLocacao) {
            list2.add(plano.getCodigo() + " # " + plano.getPrecoBaseDaDiaria() + " # " + plano.getSeguro() + " # " + plano.getTipoDeVeiculo());
        }
        
        for ( RegistroDeLocacao registro : registrosDeLocacao ){
            list3.add(registro.getCodigoDoRegistro()+" # "+registro.getCodigoDoCliente());
        }
        jButton1.setEnabled(false);
        jButton2.setEnabled(false);
        jButton4.setEnabled(false);
        jButton4.setVisible(false);
		jComboBox2.setEnabled(false);
		jLabel9.setForeground(Color.GRAY);
    }

    @SuppressWarnings("unchecked")
	private void lerDados(){
        try{
            mecanismoDePersistenciaClientesFisico = new MecanismoDePersistenciaSeguro("arquivos/clientefisico.ser");
            clientesFisicos = (ArrayList<ClienteFisico>) mecanismoDePersistenciaClientesFisico.recuperaDoArquivo();
            if(clientesFisicos == null){
            	clientesFisicos = new ArrayList<ClienteFisico>();
            }

            mecanismoDePersistenciaClientesJuridico = new MecanismoDePersistenciaSeguro("arquivos/clientejuridico.ser");
            clientesJuridicos = (ArrayList<ClienteJuridico>) mecanismoDePersistenciaClientesJuridico.recuperaDoArquivo();
            if(clientesJuridicos == null){
            	clientesJuridicos = new ArrayList<ClienteJuridico>();
            }

            mecanismoDePersistenciaAutomovel = new MecanismoDePersistenciaSeguro("arquivos/automoveis.ser");
            automoveisLista = (ArrayList<Automovel>) mecanismoDePersistenciaAutomovel.recuperaDoArquivo();
            if(automoveisLista == null){
            	automoveisLista = new ArrayList<Automovel>();
            }

            mecanismoDePersistenciaMotocicleta = new MecanismoDePersistenciaSeguro("arquivos/motocicletas.ser");
            motocicletasLista = (ArrayList<Motocicleta>) mecanismoDePersistenciaMotocicleta.recuperaDoArquivo();
            if(motocicletasLista == null){
            	motocicletasLista = new ArrayList<Motocicleta>();
            }
            
            mecanismoDePersistenciaPlanoDeLocacao = new MecanismoDePersistenciaSeguro("arquivos/planodelocacao.ser");
            planosDeLocacao = (ArrayList<PlanoDeLocacao>) mecanismoDePersistenciaPlanoDeLocacao.recuperaDoArquivo();
            if(planosDeLocacao == null){
            	planosDeLocacao = new ArrayList<PlanoDeLocacao>();
            }

            mecanismoDePersistenciaRegistroDeLocacao = new MecanismoDePersistenciaSeguro("arquivos/registrodelocacao.ser");
            registrosDeLocacao = (ArrayList<RegistroDeLocacao>) mecanismoDePersistenciaRegistroDeLocacao.recuperaDoArquivo();
            if(registrosDeLocacao == null){
            	registrosDeLocacao = new ArrayList<RegistroDeLocacao>();
            }

            mecanismoDePersistenciaRegistroDeDevolucao = new MecanismoDePersistenciaSeguro("arquivos/registrodedevolucao.ser");
            registrosDeDevolucao = (ArrayList<RegistroDeLocacao>) mecanismoDePersistenciaRegistroDeDevolucao.recuperaDoArquivo();
            if(registrosDeDevolucao == null){
            	registrosDeDevolucao = new ArrayList<RegistroDeLocacao>();
            }

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Houve um problema no carregamento do banco de dados do Sistema.", null, JOptionPane.ERROR_MESSAGE);
        }
    }

    @SuppressWarnings("unchecked")
	private void persistirDados(){

        try{
           geradorDeLog.escreveLog("Gravando dados da locacao");
           mecanismoDePersistenciaRegistroDeLocacao.persisteNoArquivo((ArrayList) this.registrosDeLocacao);
           mecanismoDePersistenciaRegistroDeDevolucao.persisteNoArquivo((ArrayList) this.registrosDeDevolucao);
           mecanismoDePersistenciaAutomovel.persisteNoArquivo((ArrayList) this.automoveisLista);
           mecanismoDePersistenciaMotocicleta.persisteNoArquivo((ArrayList) this.motocicletasLista);
        }catch(Exception e){
        }

    }
    
    private void selecionarClienteFisico( ){
      
    	String selecionado = list1.getItems()[list1.getSelectedIndex()];
        String CPFDoCliente = selecionado.split(" # ")[1];
        for (ClienteFisico cliente : clientesFisicos) {
        	if (((cliente.getCPF().replace(".", "")).replace("-", "")).equals(((CPFDoCliente.replace(".", "")).replace("-", "")))) {
        		clienteFisicoEscolhidoParaLocacao = cliente;
                jTextField2.setEnabled(true);
                jButton7.setEnabled(true);
                list2.setEnabled(true);
                break;
            }
        }
    }

     private void selecionarClienteJuridico( ){
        String selecionado = list1.getItems()[list1.getSelectedIndex()];
        String CNPJDoCliente = selecionado.split(" # ")[1];
        for (ClienteJuridico cliente : clientesJuridicos) {
            if (cliente.getCNPJ().replace(".", "").replace("-", "").equals(CNPJDoCliente.replace(".", "").replace("-", ""))) {
                clienteJuridicoEscolhidoParaLocacao = cliente;
                jTextField2.setEnabled(true);
                jButton7.setEnabled(true);
                list2.setEnabled(true);
                break;
            }
        }
     }


      private void selecionarPlanoDeLocacao( ){
        String selecionado = list2.getItems()[list2.getSelectedIndex()];
        int codigoDoPlano = Integer.parseInt(selecionado.split(" # ")[0]);
        for (PlanoDeLocacao plano : planosDeLocacao) {
            if (plano.getCodigo() == codigoDoPlano) {
                planoEscolhidoParaLocacao = plano;
                jTextField5.setEnabled(true);
                jButton9.setEnabled(true);
                list4.setEnabled(true);
                
                break;
            }
        }
     }

    private void selecionarRegistrosDeLocacao(){
    	String registroEscolhido = list3.getItems()[list3.getSelectedIndex()];
    	int codigoDoRegistro = Integer.parseInt(registroEscolhido.split(" # ")[0]);
    	for ( RegistroDeLocacao registro : registrosDeLocacao ){
    		if ( registro.getCodigoDoRegistro() == codigoDoRegistro ){
    			registroDeLocacaoEscolhido = registro;
    			jButton1.setEnabled(false);
    			jButton2.setEnabled(true);
    			break;
    		}
    	}
    }
      
	@SuppressWarnings("deprecation")
	private void selecionarVeiculos() {
		
		ArrayList<String> veiculosSelecionados = new ArrayList<String>();
		veiculosEscolhidosParaLocacao = new ArrayList<Veiculo>();
			
		for(int i = 0; i < list4.countItems(); i++){
			for(int valor : list4.getSelectedIndexes()){
				if(valor >= 0){
					
					veiculosSelecionados.add(list4.getItem(valor));
				}
		}
		
		if (planoEscolhidoParaLocacao.getTipoDeVeiculo() == TipoDeVeiculo.AUTOMOVEL) {

			String renavam = "";
			String placa = "";

			for (String string : veiculosSelecionados) {

				renavam = string.split(" # ")[3];
				placa = string.split(" # ")[2];
				for (Automovel automovel : automoveisLista) {
					
					if (automovel.getRenavam().equals(renavam) && automovel.getPlaca().equals(placa)) {
						veiculosEscolhidosParaLocacao.add(automovel);
					}
				}
			}
		
		}else if(planoEscolhidoParaLocacao.getTipoDeVeiculo() == TipoDeVeiculo.MOTOCICLETA){
				String renavam = "";
				String placa = "";

				for (String string : veiculosSelecionados) {

					renavam = string.split(" # ")[3];
					placa = string.split(" # ")[2];

					for (Motocicleta moto : motocicletasLista) {
						if (moto.getRenavam().equals(renavam)
								&& moto.getPlaca().equals(placa)) {
							veiculosEscolhidosParaLocacao.add(moto);
						}
					}
				}
			}
		}		
	}

    private void registrarLocacao(){
    	
    	RegistroDeLocacao locacao = new RegistroDeLocacao();
        Extrato extratoDaLocacao = new Extrato();

        try{

           String selecionado = list1.getItems()[list1.getSelectedIndex()];
            locacao.setCodigoDoCliente(selecionado.split(" # ")[1]);
            extratoDaLocacao.setCodigoDoCliente(locacao.getCodigoDoCliente());
            locacao.setDataEntrega(new Data());
            extratoDaLocacao.setDataDeLocacao(locacao.getDataEntrega());
            locacao.setPlanoDeLocacao(planoEscolhidoParaLocacao);
            
            double precoDaLocacao = 0;
            String movimentacao = "";
            
            if ( jComboBox1.getSelectedItem() == FormaDePagamento.DIARIAS ){
                locacao.setFormaDePagamento(RegistroDeLocacao.FormaDePagamento.DIARIAS);
                extratoDaLocacao.setFormaDePagamento(locacao.getFormaDePagamento());
                locacao.setDataDevolucao(devolucaoEscolhida);
                extratoDaLocacao.setDataDeDevolucao(locacao.getDataDevolucao());
                HashMap<Integer, HashSet<String>> mapa = new HashMap<Integer, HashSet<String>>();

                for ( Veiculo veiculo : veiculosEscolhidosParaLocacao ){
                	veiculo.setEstado(Estado.ALUGADO);
                	if ( !mapa.containsKey(veiculo.getNivelDoTanque()) ){
                		mapa.put(veiculo.getNivelDoTanque(), new HashSet<String>());
                	}
                	mapa.get(veiculo.getNivelDoTanque()).add(veiculo.getRenavam());
                }
                locacao.setInfoVeiculos(mapa);
                
                int qtdeDiarias = Data.getDiferencaDeDiasEntreDatas(new Data(), locacao.getDataDevolucao())+1;
                extratoDaLocacao.setQtdeDiariasASeremPagas(qtdeDiarias);
                
                double precoBase = planoEscolhidoParaLocacao.getPrecoBaseDaDiaria();
                extratoDaLocacao.setPrecoDaDiaria(precoBase);
                movimentacao += String.format("Preco da diaria do plano: R$ %.2f\n", extratoDaLocacao.getPrecoDaDiaria());
                for (int i = 1; i < qtdeDiarias; i++) {
                    if (i % 5 == 0 && i < Constantes.QTDE_MAX_DIAS_COM_DESCONTO) {
                        precoBase -= precoBase * (Constantes.PORCENTAGEM_DESCONTO_NAS_DIARIAS);
                    }
                }
                movimentacao += "Quantidade de diarias a serem pagas por cada veiculo: " + extratoDaLocacao.getQtdeDiariasASeremPagas()+"\n";
                movimentacao += String.format("Desconto de R$ %.2f\n", (extratoDaLocacao.getPrecoDaDiaria() - precoBase));
                extratoDaLocacao.setPrecoDaDiaria(precoBase);
                movimentacao += String.format("Preco final da diaria: R$ %.2f\n", extratoDaLocacao.getPrecoDaDiaria());
                
                for (int i = 0; i < qtdeDiarias; i++) {
                    precoDaLocacao += precoBase;
                }
                precoDaLocacao *= locacao.getCodigosDeVeiculosLocados().size();
                extratoDaLocacao.setPrecoDaLocacao(precoDaLocacao);
                movimentacao += String.format("Preco da locacao: R$ %.2f\n", extratoDaLocacao.getPrecoDaLocacao());
                extratoDaLocacao.setCodigosDosVeiculos(locacao.getCodigosDeVeiculosLocados());
                extratoDaLocacao.setCodigoDoRegistroDeLocacao(locacao.getCodigoDoRegistro());
                extratoDaLocacao.setFormaDePagamento(locacao.getFormaDePagamento());

                
                if (planoEscolhidoParaLocacao.getSeguro() != Seguro.SEM_SEGURO) {
                    extratoDaLocacao.setPrecoDoSeguro(planoEscolhidoParaLocacao.getSeguro().getValorDeMultaTotal() * (Constantes.PORCENTAGEM_DESCONTO_MULTA_PRECO_POR_SEGURO));
                    precoDaLocacao += extratoDaLocacao.getPrecoDoSeguro();
                    movimentacao += String.format("Preco do seguro: R$ %.2f\n", extratoDaLocacao.getPrecoDoSeguro());
                } else {
                	movimentacao += "Nao contem seguro.\n";
                	extratoDaLocacao.setPrecoDoSeguro(0);
                }

                locacao.setPrecoDaLocacao(precoDaLocacao);
                extratoDaLocacao.setPrecoTotal(locacao.getPrecoDaLocacao());
                movimentacao += String.format("PRECO TOTAL DA LOCACAO: R$ %.2f\n", extratoDaLocacao.getPrecoTotal());
                
                registrosDeLocacao.add(locacao);
                list3.add(locacao.getCodigoDoRegistro()+" # "+locacao.getCodigoDoCliente());
                
                geradorDeLog.escreveLog("Locacao numero " + locacao.getCodigoDoRegistro() + " realizada" + " cliente: " +
                        locacao.getCodigoDoCliente() + " veiculos: " + locacao.getCodigosDeVeiculosLocados() +
                        "data da devolucao: " + locacao.getDataDevolucao());

                JOptionPane.showMessageDialog(null, "Cliente "+locacao.getCodigoDoCliente()+" efetuou a locacao "+ locacao.getCodigoDoRegistro() + " de preco R$ " + String.format("%.2f!", locacao.getPrecoDaLocacao()), "Locacao efetuada", JOptionPane.INFORMATION_MESSAGE);
                persistirDados();
       
                  			
    			extratoDaLocacao.setInfoMovimentacao(movimentacao);
                GeradorDeExtrato gerador = new GeradorDeExtrato(extratoDaLocacao);
                gerador.gerar();
                list1.removeAll();
                list1.select(-1);
                list2.setEnabled(false);
                list2.select(-1);
                list4.removeAll();
                list4.select(-1);
                list4.setEnabled(false);
                jButton1.setEnabled(false);
                clienteFisicoEscolhidoParaLocacao= null;
                clienteJuridicoEscolhidoParaLocacao= null;
                planoEscolhidoParaLocacao = null;
                veiculosEscolhidosParaLocacao = null;
            }
            else if ( jComboBox1.getSelectedItem() == FormaDePagamento.QUILOMETRAGEM ){
                locacao.setFormaDePagamento(RegistroDeLocacao.FormaDePagamento.QUILOMETRAGEM);
                extratoDaLocacao.setFormaDePagamento(locacao.getFormaDePagamento());
                locacao.setDataDevolucao(devolucaoEscolhida);
                extratoDaLocacao.setDataDeDevolucao(locacao.getDataDevolucao());
                locacao.setQuilometragemDeclarada((Integer)jComboBox2.getSelectedItem());
                extratoDaLocacao.setQuilometragem(locacao.getQuilometragemDeclarada());
                HashMap<Integer, HashSet<String>> mapa = new HashMap<Integer, HashSet<String>>();

                for ( Veiculo veiculo : veiculosEscolhidosParaLocacao ){
                	veiculo.setEstado(Estado.ALUGADO);
                	if ( !mapa.containsKey(veiculo.getNivelDoTanque()) ){
                		mapa.put(veiculo.getNivelDoTanque(), new HashSet<String>());
                	}
                	mapa.get(veiculo.getNivelDoTanque()).add(veiculo.getRenavam());
                }
                locacao.setInfoVeiculos(mapa);

                extratoDaLocacao.setQtdeDiariasASeremPagas(0);
                
                extratoDaLocacao.setPrecoDaDiaria(planoEscolhidoParaLocacao.getPrecoBaseDaDiaria());
                movimentacao += String.format("Preco da diaria do plano: R$ %.2f\n", extratoDaLocacao.getPrecoDaDiaria());
                double precoBase = planoEscolhidoParaLocacao.getPrecoBaseDaDiaria() * (Constantes.PORCENTAGEM_DESCONTO_NA_DIARIA_PRECO_POR_QUILOMETRO);
                extratoDaLocacao.setPrecoPorQuilometro(precoBase);
                movimentacao += String.format("Preco por quilometro desejado, de cada veiculo: R$ %.2f\n", extratoDaLocacao.getPrecoPorQuilometro());

                for (int i = 0; i < locacao.getQuilometragemDeclarada(); i++) {
                    precoDaLocacao += precoBase;
                }
                precoDaLocacao *= locacao.getCodigosDeVeiculosLocados().size();

                extratoDaLocacao.setPrecoDaLocacao(precoDaLocacao);
                movimentacao += String.format("Preco da locacao: R$ %.2f\n", extratoDaLocacao.getPrecoDaLocacao());                
                extratoDaLocacao.setCodigosDosVeiculos(locacao.getCodigosDeVeiculosLocados());
                extratoDaLocacao.setCodigoDoRegistroDeLocacao(locacao.getCodigoDoRegistro());
                extratoDaLocacao.setFormaDePagamento(locacao.getFormaDePagamento());

                if (planoEscolhidoParaLocacao.getSeguro() != Seguro.SEM_SEGURO) {
                    extratoDaLocacao.setPrecoDoSeguro(planoEscolhidoParaLocacao.getSeguro().getValorDeMultaTotal() * (Constantes.PORCENTAGEM_DESCONTO_MULTA_PRECO_POR_SEGURO));
                    precoDaLocacao += extratoDaLocacao.getPrecoDoSeguro();
                    movimentacao += String.format("Preco do seguro: R$ %.2f\n", extratoDaLocacao.getPrecoDoSeguro());
                } else {
                	movimentacao += "Nao contem seguro.\n";
                    extratoDaLocacao.setPrecoDoSeguro(0);
                }
                locacao.setPrecoDaLocacao(precoDaLocacao);
                extratoDaLocacao.setPrecoTotal(locacao.getPrecoDaLocacao());
                movimentacao += String.format("PRECO TOTAL DA LOCACAO: R$ %.2f\n", extratoDaLocacao.getPrecoTotal());

                registrosDeLocacao.add(locacao);
                list3.add(locacao.getCodigoDoRegistro()+" # "+locacao.getCodigoDoCliente());
                geradorDeLog.escreveLog("Locacao numero " + locacao.getCodigoDoRegistro() + " realizada" + " cliente: " +
                        locacao.getCodigoDoCliente() + " veiculos: " + locacao.getCodigosDeVeiculosLocados() +
                        "data da devolucao: " + locacao.getDataDevolucao());

                JOptionPane.showMessageDialog(null, "Cliente "+locacao.getCodigoDoCliente()+" efetuou a locacao "+ locacao.getCodigoDoRegistro() + " de preco R$ " + String.format("%.02f!", locacao.getPrecoDaLocacao()), "Locacao efetuada", JOptionPane.INFORMATION_MESSAGE);
                persistirDados();
                extratoDaLocacao.setInfoMovimentacao(movimentacao);                
                GeradorDeExtrato gerador = new GeradorDeExtrato(extratoDaLocacao);
                gerador.gerar();
                try {
    				geradorDeLog.escreveLog("Locacao de codigo "+extratoDaLocacao.getCodigoDoRegistroDeLocacao()+" feita ao cliente de CPF "+extratoDaLocacao.getCodigoDoCliente()+" foi efetuada.");
    			} catch (Exception e) {
    				
    			}
                list1.removeAll();
                list1.select(-1);
                list2.setEnabled(false);
                list2.select(-1);
                list4.removeAll();
                list4.select(-1);
                list4.setEnabled(false);
                jButton1.setEnabled(false);
                clienteFisicoEscolhidoParaLocacao= null;
                clienteJuridicoEscolhidoParaLocacao= null;
                planoEscolhidoParaLocacao = null;
                veiculosEscolhidosParaLocacao = null;
            }

        }
        catch(Exception e){
        }
    	
    }
    
    private void efetuarDevolucao() throws Exception {
		double multaTotal = 0;
		double multasAPagar;

		if (registroDeLocacaoEscolhido.getPlanoDeLocacao().getTipoDeVeiculo() == TipoDeVeiculo.AUTOMOVEL) {
			for (Veiculo veiculo : automoveisLista) {
				for (String codigoVeiculo : registroDeLocacaoEscolhido
						.getCodigosDeVeiculosLocados()) {
					if ((veiculo.getRenavam().replace("-", ""))
							.equals(codigoVeiculo.replace("-", ""))) {

						multasAPagar = 0;

						JOptionPane.showMessageDialog(null, "Devolvendo o veiculo de RENAVAM "+veiculo.getRenavam()+"...", "Efetuando devolucao", JOptionPane.INFORMATION_MESSAGE);

						Estado[] opcoesEstados = { Estado.ARRANHADO,
								Estado.COM_ACESSORIO_DANIFICADO,
								Estado.AMASSADO_LEVE, Estado.AMASSADO_PESADO,
								Estado.ROUBADO };
						String situacoes = "Qual a situacao deste veiculo?\n";
						for ( int i=1; i<=opcoesEstados.length; i++ ){
							situacoes += i +" - "+opcoesEstados[i-1]+"\n";
						}
						situacoes += (opcoesEstados.length+1) + " - SEM DANOS\n";
						
						int escolhido = -1;
						while ( escolhido == -1 ){
							String resposta = JOptionPane.showInputDialog(null, situacoes, "Situacao do veiculo?", JOptionPane.QUESTION_MESSAGE);
							try{
								escolhido = Integer.parseInt(resposta);
								if ( escolhido <=0 || escolhido > (opcoesEstados.length+1) ){
									throw new Exception();
								}
							}catch(Exception e){
								JOptionPane.showMessageDialog(null, "Escolha um valor inteiro entre 1 e "+(opcoesEstados.length+1)+" correspondente a uma situacao.", "Entrada invalida", JOptionPane.ERROR_MESSAGE);
								escolhido = -1;
							}
						}
						if (escolhido == opcoesEstados.length + 1) {
							veiculo.setEstado(Estado.DISPONIVEL);
						} else {
							veiculo.setEstado(opcoesEstados[escolhido - 1]);
						}

						if (registroDeLocacaoEscolhido.getFormaDePagamento() == FormaDePagamento.DIARIAS) {
							int diasDeAtraso = Data
									.getDiferencaDeDiasEntreDatas(registroDeLocacaoEscolhido
											.getDataDevolucao(), new Data());

							if (diasDeAtraso > 0) {
								multasAPagar += (diasDeAtraso * registroDeLocacaoEscolhido
										.getPlanoDeLocacao()
										.getPrecoBaseDaDiaria())
										+ ((0.05) * diasDeAtraso * registroDeLocacaoEscolhido
												.getPlanoDeLocacao()
												.getPrecoBaseDaDiaria());

								JOptionPane.showMessageDialog(null, String.format("Multa por dias atrasados: R$ %.2f", multasAPagar), "Multa detectada!", JOptionPane.WARNING_MESSAGE);
								
							}

						} else if (registroDeLocacaoEscolhido.getFormaDePagamento() == FormaDePagamento.QUILOMETRAGEM) {

							int quilometrosRodados = -1 ;

							while (quilometrosRodados == -1) {
								String resposta = JOptionPane.showInputDialog(null, "Informe a quilometragem do veiculo:", "Quilometragem atual?", JOptionPane.QUESTION_MESSAGE);
								try{
									quilometrosRodados = Integer.parseInt(resposta);
									if (quilometrosRodados <= 0) {
										throw new Exception();
									}
								}
								catch(Exception e){
									JOptionPane.showMessageDialog(null, "Valor para os quilometros rodados invalido!", "Entrada invalida", JOptionPane.ERROR_MESSAGE);
									quilometrosRodados = -1;
								}
							}
							int quilometrosExcedentes = quilometrosRodados
									- registroDeLocacaoEscolhido.getQuilometragemDeclarada();

							if (quilometrosExcedentes > 0) {
								multasAPagar += registroDeLocacaoEscolhido.getPlanoDeLocacao()
										.getPrecoBaseDaDiaria() * (0.1);
								JOptionPane.showMessageDialog(null, String.format("Multa por quilometros excedentes: R$ %.2f",multasAPagar), "Multa detectada!", JOptionPane.WARNING_MESSAGE);
							}
						}

						int multa = veiculo.getEstado().getValorDeMulta();

						if (multa > 0) {
							JOptionPane.showMessageDialog(null, String.format("Multa devido a %s: R$ %d", veiculo.getEstado().toString()
											.toLowerCase(), multa), "Multa detectada!", JOptionPane.WARNING_MESSAGE);

							if (registroDeLocacaoEscolhido.getPlanoDeLocacao().getSeguro().cobre(
									veiculo.getEstado())) {
								JOptionPane.showMessageDialog(null, String.format("Desconto na multa de R$ %.2f!\n", multa
										* (registroDeLocacaoEscolhido
												.getPlanoDeLocacao()
												.getSeguro()
												.getPorcentagem())), "Seguro "
										+ registroDeLocacaoEscolhido.getPlanoDeLocacao()
												.getSeguro() + " cobre "
										+ veiculo.getEstado() + "!", JOptionPane.INFORMATION_MESSAGE);

								multa -= multa
										* (registroDeLocacaoEscolhido.getPlanoDeLocacao()
												.getSeguro().getPorcentagem());
							} else {
								JOptionPane.showMessageDialog(null, "Seguro "
										+ registroDeLocacaoEscolhido.getPlanoDeLocacao()
												.getSeguro() + " nao cobre "
										+ veiculo.getEstado() + "!", "Multa nao pode ser coberta...", JOptionPane.INFORMATION_MESSAGE);
							}

							multasAPagar += multa;

						}

						for ( Automovel auto : automoveisLista ){
							if ( auto.getRenavam().equals(veiculo.getRenavam()) ){
								auto.setEstado(Estado.DISPONIVEL);
								break;
							}
						}

						for (Integer nivelDeTanque : registroDeLocacaoEscolhido.getInfoVeiculos()
								.keySet()) {
							for (String codigo : registroDeLocacaoEscolhido.getInfoVeiculos()
									.get(nivelDeTanque)) {
								if (codigo.equals(veiculo.getRenavam())) {

									int nivelAtual = -1 ;

									while (nivelAtual == -1) {
										try{
											nivelAtual = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o nivel de tanque:", "Nivel de Tanque atual?", JOptionPane.QUESTION_MESSAGE));
											if (!(nivelAtual > 0 && nivelAtual <= 100)) {
												throw new Exception();
											}											
										}
										catch(Exception e){
											JOptionPane.showMessageDialog(null, "Valor para o nivel de tanque invalido!", "Entrada invalida", JOptionPane.ERROR_MESSAGE);
											nivelAtual = -1;
										}
									}									
																		
									int combustivelFaltando = nivelDeTanque
											- nivelAtual;
									if (combustivelFaltando > 0) {
										double multaPeloCombustivel = (combustivelFaltando)
												* (veiculo
														.getTipoDeCombustivel()
														.getPrecoPorUnidade())
												* Constantes.LITROS_POR_PORCENTAGEM_DO_TANQUE;
										multasAPagar += multaPeloCombustivel;
										JOptionPane.showMessageDialog(null, String.format("Ha diferenca no nivel de tanque em relacao ao momento da locacao!\nDiferenca de %s!\n\n \t Taxa de ressarcimento no combustivel de R$ %.2f",combustivelFaltando
												+ "%", multaPeloCombustivel), "Multa detectada!", JOptionPane.WARNING_MESSAGE);
									}
								}
							}
						}
						 try {
								geradorDeLog.escreveLog("Devolucao de veiculos pelo cliente "+registroDeLocacaoEscolhido.getCodigoDoCliente()+ " registro de locacao "+registroDeLocacaoEscolhido.getCodigoDoRegistro()+ " devolvido por "+MainGrafico.getUsuarioLogado().getLogin());
							} catch (Exception e) {
								
							}
						JOptionPane.showMessageDialog(null, String.format("Multa total que deve ser paga por este veiculo: R$ %.2f", multasAPagar), "", JOptionPane.INFORMATION_MESSAGE);
						multaTotal += multasAPagar;
					}
				}
			}
		}
		else{
			for (Veiculo veiculo : motocicletasLista) {
				for (String codigoVeiculo : registroDeLocacaoEscolhido
						.getCodigosDeVeiculosLocados()) {
					if ((veiculo.getRenavam().replace("-", ""))
							.equals(codigoVeiculo.replace("-", ""))) {

						multasAPagar = 0;

						JOptionPane.showMessageDialog(null, "Devolvendo o veiculo de RENAVAM "+veiculo.getRenavam()+"...", "Efetuando devolucao", JOptionPane.INFORMATION_MESSAGE);

						Estado[] opcoesEstados = { Estado.ARRANHADO,
								Estado.COM_ACESSORIO_DANIFICADO,
								Estado.AMASSADO_LEVE, Estado.AMASSADO_PESADO,
								Estado.ROUBADO };
						String situacoes = "Qual a situacao deste veiculo?\n";
						for ( int i=1; i<=opcoesEstados.length; i++ ){
							situacoes += i +" - "+opcoesEstados[i-1]+"\n";
						}
						situacoes += (opcoesEstados.length+1) + " - SEM DANOS\n";
						
						int escolhido = -1;
						while ( escolhido == -1 ){
							String resposta = JOptionPane.showInputDialog(null, situacoes, "Situacao do veiculo?", JOptionPane.QUESTION_MESSAGE);
							try{
								escolhido = Integer.parseInt(resposta);
								if ( escolhido <=0 || escolhido > (opcoesEstados.length+1) ){
									throw new Exception();
								}
							}catch(Exception e){
								JOptionPane.showMessageDialog(null, "Escolha um valor inteiro entre 1 e "+(opcoesEstados.length+1)+" correspondente a uma situacao.", "Entrada invalida", JOptionPane.ERROR_MESSAGE);
								escolhido = -1;
							}
						}
						if (escolhido == opcoesEstados.length + 1) {
							veiculo.setEstado(Estado.DISPONIVEL);
						} else {
							veiculo.setEstado(opcoesEstados[escolhido - 1]);
						}

						if (registroDeLocacaoEscolhido.getFormaDePagamento() == FormaDePagamento.DIARIAS) {
							int diasDeAtraso = Data
									.getDiferencaDeDiasEntreDatas(registroDeLocacaoEscolhido
											.getDataDevolucao(), new Data());

							if (diasDeAtraso > 0) {
								multasAPagar += (diasDeAtraso * registroDeLocacaoEscolhido
										.getPlanoDeLocacao()
										.getPrecoBaseDaDiaria())
										+ ((0.05) * diasDeAtraso * registroDeLocacaoEscolhido
												.getPlanoDeLocacao()
												.getPrecoBaseDaDiaria());

								JOptionPane.showMessageDialog(null, String.format("Multa por dias atrasados: R$ %.2f", multasAPagar), "Multa detectada!", JOptionPane.WARNING_MESSAGE);
								
							}

						} else if (registroDeLocacaoEscolhido.getFormaDePagamento() == FormaDePagamento.QUILOMETRAGEM) {

							int quilometrosRodados = -1 ;

							while (quilometrosRodados == -1) {
								String resposta = JOptionPane.showInputDialog(null, "Informe a quilometragem do veiculo:", "Quilometragem atual?", JOptionPane.QUESTION_MESSAGE);
								try{
									quilometrosRodados = Integer.parseInt(resposta);
									if (quilometrosRodados <= 0) {
										throw new Exception();
									}
								}
								catch(Exception e){
									JOptionPane.showMessageDialog(null, "Valor para os quilometros rodados invalido!", "Entrada invalida", JOptionPane.ERROR_MESSAGE);
									quilometrosRodados = -1;
								}
							}
							int quilometrosExcedentes = quilometrosRodados
									- registroDeLocacaoEscolhido.getQuilometragemDeclarada();

							if (quilometrosExcedentes > 0) {
								multasAPagar += registroDeLocacaoEscolhido.getPlanoDeLocacao()
										.getPrecoBaseDaDiaria() * (0.1);
								JOptionPane.showMessageDialog(null, String.format("Multa por quilometros excedentes: R$ %.2f",multasAPagar), "Multa detectada!", JOptionPane.WARNING_MESSAGE);
							}
						}

						int multa = veiculo.getEstado().getValorDeMulta();

						if (multa > 0) {
							JOptionPane.showMessageDialog(null, String.format("Multa devido a %s: R$ %d", veiculo.getEstado().toString()
											.toLowerCase(), multa), "Multa detectada!", JOptionPane.WARNING_MESSAGE);

							if (registroDeLocacaoEscolhido.getPlanoDeLocacao().getSeguro().cobre(
									veiculo.getEstado())) {
								JOptionPane.showMessageDialog(null, String.format("Desconto na multa de R$ %.2f!\n", multa
										* (registroDeLocacaoEscolhido
												.getPlanoDeLocacao()
												.getSeguro()
												.getPorcentagem())), "Seguro "
										+ registroDeLocacaoEscolhido.getPlanoDeLocacao()
												.getSeguro() + " cobre "
										+ veiculo.getEstado() + "!", JOptionPane.INFORMATION_MESSAGE);

								multa -= multa
										* (registroDeLocacaoEscolhido.getPlanoDeLocacao()
												.getSeguro().getPorcentagem());
							} else {
								JOptionPane.showMessageDialog(null, "Seguro "
										+ registroDeLocacaoEscolhido.getPlanoDeLocacao()
												.getSeguro() + " nao cobre "
										+ veiculo.getEstado() + "!", "Multa nao pode ser coberta...", JOptionPane.INFORMATION_MESSAGE);
							}

							multasAPagar += multa;

						}

						for ( Motocicleta moto : motocicletasLista ){
							if ( moto.getRenavam().equals(veiculo.getRenavam()) ){
								moto.setEstado(Estado.DISPONIVEL);
								break;
							}
						}

						for (Integer nivelDeTanque : registroDeLocacaoEscolhido.getInfoVeiculos()
								.keySet()) {
							for (String codigo : registroDeLocacaoEscolhido.getInfoVeiculos()
									.get(nivelDeTanque)) {
								if (codigo.equals(veiculo.getRenavam())) {

									int nivelAtual = -1 ;

									while (nivelAtual == -1) {
										try{
											nivelAtual = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe o nivel de tanque:", "Nivel de Tanque atual?", JOptionPane.QUESTION_MESSAGE));
											if (!(nivelAtual > 0 && nivelAtual <= 100)) {
												throw new Exception();
											}											
										}
										catch(Exception e){
											JOptionPane.showMessageDialog(null, "Valor para o nivel de tanque invalido!", "Entrada invalida", JOptionPane.ERROR_MESSAGE);
											nivelAtual = -1;
										}
									}									
																		
									int combustivelFaltando = nivelDeTanque
											- nivelAtual;
									if (combustivelFaltando > 0) {
										double multaPeloCombustivel = (combustivelFaltando)
												* (veiculo
														.getTipoDeCombustivel()
														.getPrecoPorUnidade())
												* Constantes.LITROS_POR_PORCENTAGEM_DO_TANQUE;
										multasAPagar += multaPeloCombustivel;
										JOptionPane.showMessageDialog(null, String.format("Ha diferenca no nivel de tanque em relacao ao momento da locacao!\nDiferenca de %s!\n\n \t Taxa de ressarcimento no combustivel de R$ %.2f",combustivelFaltando
												+ "%", multaPeloCombustivel), "Multa detectada!", JOptionPane.WARNING_MESSAGE);
									}
								}
							}
						}
						try {
							geradorDeLog.escreveLog("Devolucao de veiculos pelo cliente "+registroDeLocacaoEscolhido.getCodigoDoCliente()+ " registro de locacao "+registroDeLocacaoEscolhido.getCodigoDoRegistro()+ " devolvido por "+MainGrafico.getUsuarioLogado().getLogin());
						} catch (Exception e) {
							
						}
						JOptionPane.showMessageDialog(null, String.format("Multa total que deve ser paga por este veiculo: R$ %.2f", multasAPagar), "", JOptionPane.INFORMATION_MESSAGE);
						multaTotal += multasAPagar;
					}
				}
			}
		}

		JOptionPane.showMessageDialog(null, String.format("Multa TOTAL que o cliente deve pagar: R$ %.2f",multaTotal), "Devolucao efetuada", JOptionPane.INFORMATION_MESSAGE);
		
		registroDeLocacaoEscolhido.setMultaTotal(multaTotal);
		registrosDeLocacao.remove(registroDeLocacaoEscolhido);
		registrosDeDevolucao.add(registroDeLocacaoEscolhido);
		geradorDeLog.escreveLog("Devolucao " + registroDeLocacaoEscolhido.getCodigoDoRegistro()
				+ " cliente: " + registroDeLocacaoEscolhido.getCodigoDoCliente() + " multa R$: "
				+ registroDeLocacaoEscolhido.getMultaTotal() + " forma: "
				+ registroDeLocacaoEscolhido.getFormaDePagamento() + " plano: "
				+ registroDeLocacaoEscolhido.getPlanoDeLocacao().getCodigo());    	
    }
      
   
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jSeparator1 = new javax.swing.JSeparator();
        jSeparator2 = new javax.swing.JSeparator();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        clienteFisico = new javax.swing.JRadioButton();
        clienteJuridica = new javax.swing.JRadioButton();
        jLabel5 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jLabel13 = new javax.swing.JLabel();
        jTextField4 = new javax.swing.JTextField();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jTextField5 = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jButton9 = new javax.swing.JButton();
        scrollPane1 = new java.awt.ScrollPane();
        list1 = new java.awt.List();
        scrollPane2 = new java.awt.ScrollPane();
        list2 = new java.awt.List();
        scrollPane3 = new java.awt.ScrollPane();
        list3 = new java.awt.List();
        jSeparator3 = new javax.swing.JSeparator();
        scrollPane5 = new java.awt.ScrollPane();
        list4 = new java.awt.List();
        label1 = new java.awt.Label();
        jTextField3 = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jComboBox1 = new javax.swing.JComboBox();
        jComboBox1.addItemListener(new ItemListener() {
        	public void itemStateChanged(ItemEvent evt) {
        		jComboBox1ItemStateChanged(evt);
        	}
        });
        jLabel9 = new javax.swing.JLabel();
        jComboBox2 = new javax.swing.JComboBox();

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14));
        jLabel1.setText("Locacao / Devolucao");

        jLabel2.setText("Cliente:");

        jLabel3.setText("Consultar:");

        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });
        jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextField1KeyPressed(evt);
            }
        });

        buttonGroup1.add(clienteFisico);
        clienteFisico.setText("Cliente Fisico");
        clienteFisico.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                clienteFisicoMouseClicked(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                clienteFisicoMousePressed(evt);
            }
        });
        clienteFisico.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                clienteFisicoStateChanged(evt);
            }
        });
        clienteFisico.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                clienteFisicoItemStateChanged(evt);
            }
        });
        clienteFisico.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                clienteFisicoKeyPressed(evt);
            }
        });

        buttonGroup1.add(clienteJuridica);
        clienteJuridica.setText("Cliente Juridico");
        clienteJuridica.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                clienteJuridicaMousePressed(evt);
            }
        });
        clienteJuridica.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                clienteJuridicaActionPerformed(evt);
            }
        });

        jLabel5.setText("Veiculo:");

        jTextField2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField2ActionPerformed(evt);
            }
        });
        jTextField2.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextField2KeyPressed(evt);
            }
        });

        jLabel7.setText("Consultar:");

        jLabel8.setText("Plano:");

        jButton1.setText("Efetuar Locacao");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Efetuar Devolucao");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton4.setText("Salvar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        jButton5.setText("Voltar");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jLabel13.setText("Consultar:");

        jButton6.setText("OK");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });

        jButton7.setText("OK");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });

        jButton8.setText("OK");
        jButton8.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jButton8MousePressed(evt);
            }
        });
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });

        jTextField5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField5ActionPerformed(evt);
            }
        });
        jTextField5.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextField5KeyPressed(evt);
            }
        });

        jLabel4.setText("Consultar:");

        jButton9.setText("OK");
        jButton9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton9ActionPerformed(evt);
            }
        });

        scrollPane1.add(list1);
        list1.addItemListener(new ItemListener() {
        	public void itemStateChanged(ItemEvent evt) {
        		list1ItemStateChanged(evt);
        	}
        });

        scrollPane2.add(list2);
        list2.addItemListener(new ItemListener() {
        	public void itemStateChanged(ItemEvent evt) {
        		list2ItemStateChanged(evt);
        	}
        });
        
        scrollPane3.add(list3);
        list3.addItemListener(new ItemListener() {
        	public void itemStateChanged(ItemEvent evt) {
        		list3ItemStateChanged(evt);
        	}
        });

        scrollPane5.add(list4);
        list4.addItemListener(new ItemListener() {
        	public void itemStateChanged(ItemEvent evt) {
        		list4ItemStateChanged(evt);
        	}
        });

        label1.setText("Data de devolucao:");

        jLabel6.setText("Forma de Pagamento:");

        jLabel9.setText("Quilometragem desejada:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 548, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel2)
                                        .addComponent(clienteFisico))
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(clienteJuridica))
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabel3)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGap(9, 9, 9)
                                    .addComponent(jButton8))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(scrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(scrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addGroup(layout.createSequentialGroup()
                                                .addComponent(jLabel7)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE))
                                            .addComponent(jLabel8))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jButton7)))
                                .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel4)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(jButton9))
                                    .addComponent(scrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                            .addGap(22, 22, 22)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel9)
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 126, Short.MAX_VALUE)
                                        .addComponent(label1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                    .addGap(78, 78, 78))
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel6)
                                        .addGroup(layout.createSequentialGroup()
                                            .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 104, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
                                .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jButton5, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButton4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 129, Short.MAX_VALUE))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(scrollPane3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel13)
                                        .addGroup(layout.createSequentialGroup()
                                            .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, 137, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                            .addComponent(jButton6))))))
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(1, 1, 1)
                            .addComponent(jLabel1)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jSeparator2))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 11, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(23, 23, 23)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jLabel13))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(clienteFisico)
                    .addComponent(clienteJuridica)
                    .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton6))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(11, 11, 11)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel3)
                            .addComponent(jButton8)
                            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(scrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel8)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jLabel7)
                                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addComponent(jButton7))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(scrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel5))
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(26, 26, 26)
                                .addComponent(jLabel6)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(44, 44, 44)
                                .addComponent(jLabel9)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(scrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 230, Short.MAX_VALUE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton9))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton5))
                    .addComponent(scrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton2)))
                .addGap(10, 10, 10)
                .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void clienteJuridicaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clienteJuridicaActionPerformed

    }//GEN-LAST:event_clienteJuridicaActionPerformed

    private void clienteFisicoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_clienteFisicoKeyPressed
   
    }//GEN-LAST:event_clienteFisicoKeyPressed

    private void clienteFisicoStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_clienteFisicoStateChanged

    }//GEN-LAST:event_clienteFisicoStateChanged

    private void clienteFisicoItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_clienteFisicoItemStateChanged
      
    }//GEN-LAST:event_clienteFisicoItemStateChanged

    private void clienteFisicoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clienteFisicoMouseClicked
        
    }//GEN-LAST:event_clienteFisicoMouseClicked

    private void clienteFisicoMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clienteFisicoMousePressed
            list1.removeAll();
            list2.select(-1);
            list2.setEnabled(false);
            list4.removeAll();
            list4.select(-1);
            list4.setEnabled(false);
            jButton1.setEnabled(false);
            jButton2.setEnabled(false);
            clienteFisicoEscolhidoParaLocacao= null;
            clienteJuridicoEscolhidoParaLocacao= null;
            planoEscolhidoParaLocacao = null;
            veiculosEscolhidosParaLocacao = null;
            for (ClienteFisico cliente : clientesFisicos ){
                list1.add(cliente.getNome() + " # " + cliente.getCPF());
            }
    }//GEN-LAST:event_clienteFisicoMousePressed

    private void clienteJuridicaMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clienteJuridicaMousePressed
            list1.removeAll();
            list2.select(-1);
            list2.setEnabled(false);
            list4.removeAll();
            list4.select(-1);
            list4.setEnabled(false);
            jButton1.setEnabled(false);
            jButton2.setEnabled(false);
            list3.select(-1);
            clienteFisicoEscolhidoParaLocacao= null;
            clienteJuridicoEscolhidoParaLocacao= null;
            planoEscolhidoParaLocacao = null;
            veiculosEscolhidosParaLocacao = null;
            for (ClienteJuridico clienteJuridico : clientesJuridicos ){
                list1.add(clienteJuridico.getNome() + " # " + clienteJuridico.getCNPJ());
            }
    }//GEN-LAST:event_clienteJuridicaMousePressed

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField1ActionPerformed
    }//GEN-LAST:event_jTextField1ActionPerformed

    private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField1KeyPressed
    }//GEN-LAST:event_jTextField1KeyPressed

    private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField2ActionPerformed
    }//GEN-LAST:event_jTextField2ActionPerformed

    private void jTextField2KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField2KeyPressed
    }//GEN-LAST:event_jTextField2KeyPressed

    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
    	if ( ( veiculosEscolhidosParaLocacao != null &&	(!veiculosEscolhidosParaLocacao.isEmpty()) && planoEscolhidoParaLocacao != null 
    			&& ( clienteFisicoEscolhidoParaLocacao != null || clienteJuridicoEscolhidoParaLocacao != null )) ){
    		System.out.println("here1");
    		try{
    			int dia = Integer.parseInt(jTextField3.getText().split("/")[0]);
    			int mes = Integer.parseInt(jTextField3.getText().split("/")[1]);
    			int ano = Integer.parseInt(jTextField3.getText().split("/")[2]);
    			devolucaoEscolhida = new Data(dia,mes,ano);
    			if ( Data.getDiferencaDeDiasEntreDatas(new Data(), devolucaoEscolhida) < 0 ){
    				throw new Exception();
    			}
    		}
    		catch(Exception e){
    			JOptionPane.showMessageDialog(null, "Especifique uma data de devolucao valida!\nVerifique tambem se ela nao eh anterior a data atual!", "Erro na locacao", JOptionPane.ERROR_MESSAGE);
    		}
			boolean temLocacoesPendentes = false;
    		for ( RegistroDeLocacao registro : registrosDeLocacao ){
				if (clienteFisicoEscolhidoParaLocacao != null) {
					if ((clienteFisicoEscolhidoParaLocacao.getCPF().replace(
							"-", "")).replace(".", "").equals(
							(registro.getCodigoDoCliente().replace("-", ""))
									.replace(".", ""))) {
						temLocacoesPendentes = true;
					}
				} else if (clienteJuridicoEscolhidoParaLocacao != null) {
					if ((clienteJuridicoEscolhidoParaLocacao.getCNPJ().replace(
							"-", "")).replace(".", "").equals(
							(registro.getCodigoDoCliente().replace("-", ""))
									.replace(".", ""))) {
						temLocacoesPendentes = true;
					}
				}
    		}
    		if ( !temLocacoesPendentes ){
    			registrarLocacao();
    		}
    		else{
    			JOptionPane.showMessageDialog(null, "Esse cliente possui locacoes pendentes!", "Erro na locacao", JOptionPane.ERROR_MESSAGE);
    		}
    	}
    	else{
			JOptionPane.showMessageDialog(null, "Deve haver pelo menos um veiculo a ser locado!", "Erro na locacao", JOptionPane.ERROR_MESSAGE);
    	}
    	
    }//GEN-LAST:event_jButton1ActionPerformed

	private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_jButton2ActionPerformed
		try{
			efetuarDevolucao();
		}
		catch(Exception e){
			JOptionPane.showMessageDialog(null, "Um erro inesperado aconteceu durante o processo de devolucao", "Erro na devolucao", JOptionPane.ERROR_MESSAGE);
		}
		persistirDados();
		jButton1.setEnabled(false);
		jButton2.setEnabled(false);
		list3.remove(registroDeLocacaoEscolhido.getCodigoDoRegistro()+" # "+registroDeLocacaoEscolhido.getCodigoDoCliente());
		list3.select(-1);
		
	}// GEN-LAST:event_jButton2ActionPerformed

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
    }//GEN-LAST:event_jButton4ActionPerformed

    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
       
    	if(MainGrafico.getUsuarioLogado().getEhGerente()){
    		MainGrafico.entrarNaArea(MainGrafico.getMenuCorrente(), Constantes.INTERFACE_TAMANHO_MENU[0], Constantes.INTERFACE_TAMANHO_MENU[1]);
            MainGrafico.sairDaArea(this);
    	}else{
    		MainGrafico.entrarNaArea(new InterfaceLogin(), Constantes.INTERFACE_TAMANHO_LOGIN[0], Constantes.INTERFACE_TAMANHO_LOGIN[1]);
    		MainGrafico.sairDaArea(this);
    	}
    	
    	
    }//GEN-LAST:event_jButton5ActionPerformed

    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
    }//GEN-LAST:event_jButton6ActionPerformed

    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed

    	
    	jButton2.setEnabled(false);
        list3.select(-1);
    	String parametroDeConsulta = jTextField2.getText();

		String[] consultados = list2.getItems();

		for (int i = 0; i < consultados.length; i++) {
			if ((consultados[i].toLowerCase()).contains(parametroDeConsulta
					.toLowerCase())) {
				list2.select(i);
				jTextField2.setText("");
				selecionarPlanoDeLocacao();
				break;
			}
        }
		list4.removeAll();
		
		if(planoEscolhidoParaLocacao.getTipoDeVeiculo() == TipoDeVeiculo.AUTOMOVEL){
	    	for ( Veiculo automovel : automoveisLista ){
				if ( planoEscolhidoParaLocacao.getMarcas().contains(automovel.getMarca()) ){
					if ( planoEscolhidoParaLocacao.getModelos().contains(automovel.getModelo()) ){
						if ( planoEscolhidoParaLocacao.getPotencia() == automovel.getPotencia() ){
							list4.add(automovel.getMarca()+" # "+automovel.getModelo()+" # "+automovel.getPlaca()+" # "+automovel.getRenavam());
						}
					}
				}
			}
		}else if(planoEscolhidoParaLocacao.getTipoDeVeiculo() == TipoDeVeiculo.MOTOCICLETA){
			for ( Veiculo motocicleta: automoveisLista ){
				if ( planoEscolhidoParaLocacao.getMarcas().contains(motocicleta.getMarca()) ){
					if ( planoEscolhidoParaLocacao.getModelos().contains(motocicleta.getModelo()) ){
						if ( planoEscolhidoParaLocacao.getPotencia() == motocicleta.getPotencia() ){
							list4.add(motocicleta.getMarca()+" # "+motocicleta.getModelo()+" # "+motocicleta.getPlaca()+" # "+motocicleta.getRenavam());
						}
					}
				}
			}
		}		
		jButton1.setEnabled(true);
		
    }//GEN-LAST:event_jButton7ActionPerformed

    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
        jButton2.setEnabled(false);
        list3.select(-1);
    	String parametroDeConsulta = jTextField1.getText();

		String[] consultados = list1.getItems();

		for (int i = 0; i < consultados.length; i++) {
			if ((consultados[i].toLowerCase()).contains(parametroDeConsulta
					.toLowerCase())) {
				list1.select(i);
				jTextField1.setText("");
		    	ButtonModel modelo = clienteFisico.getModel();
				if (buttonGroup1.isSelected(modelo)) {
					selecionarClienteFisico();
				} else {
					selecionarClienteJuridico();
				}

				break;
			}
        }
    }//GEN-LAST:event_jButton8ActionPerformed

    private void jTextField5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField5ActionPerformed
    }//GEN-LAST:event_jTextField5ActionPerformed

    private void jTextField5KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField5KeyPressed
    }//GEN-LAST:event_jTextField5KeyPressed

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton9ActionPerformed
    }//GEN-LAST:event_jButton9ActionPerformed

    private void jButton8MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton8MousePressed
        
        String consulta = jTextField1.getText();
        list1.removeAll();
       
        for (ClienteFisico cliente : clientesFisicos ){

            if (cliente.getNome().toLowerCase().contains(consulta.toLowerCase()))
                list1.add(cliente.getNome() + " # " + cliente.getCPF());
                        
        }

    }//GEN-LAST:event_jButton8MousePressed
    
    private void list1ItemStateChanged(ItemEvent evt) {
        jButton2.setEnabled(false);
        list3.select(-1);
    	ButtonModel modelo = clienteFisico.getModel();
    	if (buttonGroup1.isSelected(modelo)){
    		selecionarClienteFisico();
    	}
    	else {
    		selecionarClienteJuridico();
    	}
    }

    private void list2ItemStateChanged(ItemEvent evt) {
        jButton2.setEnabled(false);
        list3.select(-1);
		selecionarPlanoDeLocacao();
		
		list4.removeAll();
		
		list4.removeAll();
		
		if(planoEscolhidoParaLocacao.getTipoDeVeiculo() == TipoDeVeiculo.AUTOMOVEL){
	    	for ( Veiculo automovel : automoveisLista ){
				if ( planoEscolhidoParaLocacao.getMarcas().contains(automovel.getMarca()) ){
					if ( planoEscolhidoParaLocacao.getModelos().contains(automovel.getModelo()) ){
						if ( planoEscolhidoParaLocacao.getPotencia() == automovel.getPotencia() ){
							list4.add(automovel.getMarca()+" # "+automovel.getModelo()+" # "+automovel.getPlaca()+" # "+automovel.getRenavam());
						}
					}
				}
			}
		}else if(planoEscolhidoParaLocacao.getTipoDeVeiculo() == TipoDeVeiculo.MOTOCICLETA){
			for ( Veiculo motocicleta: automoveisLista ){
				if ( planoEscolhidoParaLocacao.getMarcas().contains(motocicleta.getMarca()) ){
					if ( planoEscolhidoParaLocacao.getModelos().contains(motocicleta.getModelo()) ){
						if ( planoEscolhidoParaLocacao.getPotencia() == motocicleta.getPotencia() ){
							list4.add(motocicleta.getMarca()+" # "+motocicleta.getModelo()+" # "+motocicleta.getPlaca()+" # "+motocicleta.getRenavam());
						}
					}
				}
			}
		}
		
		
		jButton1.setEnabled(true);
	}
    
    private void jComboBox1ItemStateChanged(ItemEvent evt) {
    	if ( jComboBox1.getSelectedItem() == FormaDePagamento.DIARIAS ){
    		jComboBox2.setEnabled(false);
    		jLabel9.setForeground(Color.GRAY);
    	}
    	else if (jComboBox1.getSelectedItem() == FormaDePagamento.QUILOMETRAGEM ){
    		jComboBox2.setEnabled(true);
    		jLabel9.setForeground(Color.BLACK);
    	}
    }
    
    private void list4ItemStateChanged(ItemEvent evt) {
        jButton2.setEnabled(false);
        list3.select(-1);
    	selecionarVeiculos();
    
    }
    
    private void list3ItemStateChanged(ItemEvent evt) {
        selecionarRegistrosDeLocacao();
    	
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JRadioButton clienteFisico;
    private javax.swing.JRadioButton clienteJuridica;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JComboBox jComboBox2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JSeparator jSeparator2;
    private javax.swing.JSeparator jSeparator3;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField4;
    private javax.swing.JTextField jTextField5;
    private java.awt.Label label1;
    private java.awt.List list1;
    private java.awt.List list2;
    private java.awt.List list3;
    private java.awt.List list4;
    private java.awt.ScrollPane scrollPane1;
    private java.awt.ScrollPane scrollPane2;
    private java.awt.ScrollPane scrollPane3;
    private java.awt.ScrollPane scrollPane5;
    // End of variables declaration//GEN-END:variables

}
